<?php
/*
 * Класс реализующий временное хранилище. Его назначение в том, чтобы временно хранить потоки где-то, перед обработкой.
 * Для того, чтобы потоки сначала скачать, а уже потом сделать обработку правил. 
 * 
 * Такое разделение аггрегатора на части упрощает отлов ошибок и позволяет разделить аггрегатор 
 * на части: даунлоадер и обработчик правил.
 * 
 * @author Alexander Sibryakov
 */
class RssTmpStore {
	
	private $dlq;
	private $lib_rss;
	private $queue;
	
	public function __construct(Model_RssDLQueue $dlq, RssLibWrapper $lib_rss) {
		$this->dlq = $dlq;
		$this->lib_rss = $lib_rss;
	}
	
	/**
	 * Получить RSS потоки во временное хранилище
	 */
	public function getAll() {
		$this->queue = $this->dlq->getQueue();
		
		foreach($this->queue as $num=>$download) {
			if ($this->get($download)) {
				$download->upState(true, 0);
			} else {
				$download->upState(false, 0);
				}
		}
		
	}
	
	/**
	 * Возвращает массив с содержимым потоков
	 * 
	 * @return array (RssItem)
	 */
	public function retAll() {
		$rss_array = array();
		foreach ($this->queue as $n=>$dl) {
			if ($dl->isSuccessGet()) {
				debug("RSSA: Attempting to get ".$dl->getURL()." from cache");
				$rss = $this->lib_rss->fetch($dl->getURL()); // поидее должно достать из кэша
				if ($rss) {
					$items = array();
					foreach ($rss->items as $item) $items[] = $this->lib_rss->makeRssItem($item);
					$rss_array[$dl->getFeedOid()] = $items;
				}
				
				unset($rss);
			}
		}
		return $rss_array;
	}
	
	/**
	 * Выкачивает конкретный поток
	 * 
	 * @param RssDownload
	 * @return boolean
	 */
	private function get(RssDownload $dl) {
		debug("RSSA: Getting url ".$dl->getURL());
		$rss = $this->lib_rss->fetch( $dl->getURL(), false ); // теперь оно в кэше
		
		if ($rss) {
			debug("RSSA: Successfull");
			return true;
		}
			
		return false;
	}
}
?>
